/**
 * @file compare.h
 * @author your name (you@domain.com)
 * @brief
 * @version 0.1
 * @date 2025-05-06
 *
 * @copyright Copyright (c) 2025
 *
 */
#ifndef COMPARE_H
#define COMPARE_H
#include <xmzTypeDefine.h>
///////////////梯形图
//==
//<>
//<=
//>=
//<
//>
//IN_Range
//OUT_Range
//ContactOK
//ContactNOTOK
///////////////ST

/////////////////////////////
// 定义比较操作类型
typedef enum {
  CMP_EQ, // 等于 (==)
  CMP_NE, // 不等于 (!=)
  CMP_GT, // 大于 (>)
  CMP_LT, // 小于 (<)
  CMP_GE, // 大于等于 (>=)
  CMP_LE  // 小于等于 (<=)
} CompareOp;

// 比较函数声明
Bool Compare_Time(Bool pre, Time val1, Time val2, CompareOp op);
Bool Compare_Byte(Bool pre, Byte val1, Byte val2, CompareOp op);
Bool Compare_Word(Bool pre, Word val1, Word val2, CompareOp op);
Bool Compare_DWord(Bool pre, DWord val1, DWord val2, CompareOp op);
Bool Compare_LWord(Bool pre, LWord val1, LWord val2, CompareOp op);
Bool Compare_SInt(Bool pre, SInt val1, SInt val2, CompareOp op);
Bool Compare_USInt(Bool pre, USInt val1, USInt val2, CompareOp op);
Bool Compare_Int(Bool pre, Int val1, Int val2, CompareOp op);
Bool Compare_UInt(Bool pre, UInt val1, UInt val2, CompareOp op);
Bool Compare_DInt(Bool pre, DInt val1, DInt val2, CompareOp op);
Bool Compare_UDInt(Bool pre, UDInt val1, UDInt val2, CompareOp op);
Bool Compare_LInt(Bool pre, LInt val1, LInt val2, CompareOp op);
Bool Compare_ULInt(Bool pre, ULInt val1, ULInt val2, CompareOp op);
Bool Compare_Real(Bool pre, Real val1, Real val2, CompareOp op);
Bool Compare_LReal(Bool pre, LReal val1, LReal val2, CompareOp op);

// 范围比较函数声明
Bool InRange_Byte(Bool pre, Byte value, Byte min, Byte max);
Bool OutOfRange_Byte(Bool pre, Byte value, Byte min, Byte max);
Bool InRange_Word(Bool pre, Word value, Word min, Word max);
Bool OutOfRange_Word(Bool pre, Word value, Word min, Word max);
Bool InRange_DWord(Bool pre, DWord value, DWord min, DWord max);
Bool OutOfRange_DWord(Bool pre, DWord value, DWord min, DWord max);
Bool InRange_LWord(Bool pre, LWord value, LWord min, LWord max);
Bool OutOfRange_LWord(Bool pre, LWord value, LWord min, LWord max);
Bool InRange_SInt(Bool pre, SInt value, SInt min, SInt max);
Bool OutOfRange_SInt(Bool pre, SInt value, SInt min, SInt max);
Bool InRange_USInt(Bool pre, USInt value, USInt min, USInt max);
Bool OutOfRange_USInt(Bool pre, USInt value, USInt min, USInt max);
Bool InRange_Int(Bool pre, Int value, Int min, Int max);
Bool OutOfRange_Int(Bool pre, Int value, Int min, Int max);
Bool InRange_UInt(Bool pre, UInt value, UInt min, UInt max);
Bool OutOfRange_UInt(Bool pre, UInt value, UInt min, UInt max);
Bool InRange_DInt(Bool pre, DInt value, DInt min, DInt max);
Bool OutOfRange_DInt(Bool pre, DInt value, DInt min, DInt max);
Bool InRange_UDInt(Bool pre, UDInt value, UDInt min, UDInt max);
Bool OutOfRange_UDInt(Bool pre, UDInt value, UDInt min, UDInt max);
Bool InRange_LInt(Bool pre, LInt value, LInt min, LInt max);
Bool OutOfRange_LInt(Bool pre, LInt value, LInt min, LInt max);
Bool InRange_ULInt(Bool pre, ULInt value, ULInt min, ULInt max);
Bool OutOfRange_ULInt(Bool pre, ULInt value, ULInt min, ULInt max);
Bool InRange_Real(Bool pre, Real value, Real min, Real max);
Bool OutOfRange_Real(Bool pre, Real value, Real min, Real max);
Bool InRange_LReal(Bool pre, LReal value, LReal min, LReal max);
Bool OutOfRange_LReal(Bool pre, LReal value, LReal min, LReal max);



int test_compare(void);
#endif // COMPARE_H
